package org.grottarossa.aeroflow.data;

import org.grottarossa.data.Query;
import org.grottarossa.data.exception.QueryException;
import org.grottarossa.driver.ECMBuilderTemplate;
import org.grottarossa.template.data.DataType;
import org.grottarossa.template.data.DataTypeValue;
import org.grottarossa.template.data.enums.EnumDataType;
import org.grottarossa.template.data.pojo.table.Cell;
import org.grottarossa.template.data.pojo.table.Record;
import org.grottarossa.template.data.pojo.table.Table;
import org.grottarossa.template.data.pojo.utils.Container;


/**
*
* La classe implementa il meccanismo per il recupero dei fields dal driver di aeroflow
*
* @author Marco Sabatini (sabatini.m@gmail.com)
* @author Maurizio Farina (maurizio.farina@gmail.com)
* @author Marco Trischitta (marco.trischitta@gmail.com)
*
* @version %I%, %G%
* @since 1.0
*
* */
public class FieldsQuery extends Query
{
	public FieldsQuery(ECMBuilderTemplate builder)
	{
		super(builder);
	}

	/**
	 * Il metodo esegue la query che recupera i valori del field da recuperare.
	 *
	 * @param type E' un'oggetto di tipo ResultSetType serve per indicare il tipo di container che il metodo deve fornire
	 * @return Container E' il container in cui vengono memorizzate le informazioni e passate alla parte di front-end
	 *
	 * */
	@Override
	public Container execute(ResultSetType type) throws QueryException
	{
		DataType dataType = m_builder.getCaseManagement().getFieldsMapConverted().get(this.field);

		Table table = new Table();
		table.getHeader().add(new Cell("key", EnumDataType.String, "key"));
		table.getHeader().add(new Cell("value", dataType.getType(), "value"));

		setMasterPropertyName("key");
		setStoragePropertyName("value");

		for(DataTypeValue datatypeVal: dataType.getValues())
		{
			if(datatypeVal.getKey()!=null)
			{
				Record record = new Record ();
				record.add(new Cell("key",EnumDataType.String,datatypeVal.getKey()  ));
				record.add(new Cell("value",dataType.getType(),datatypeVal.getValue() ));

				table.getRecords().add(record);
			}
			else
			{
				Record record = new Record ();
				record.add(new Cell("key",EnumDataType.String, datatypeVal.getValue() ));//same value
				record.add(new Cell("value",dataType.getType(),datatypeVal.getValue() ));

				table.getRecords().add(record);
			}
		}

		return table;
	}
}